package com.example.nep.util;

import com.alibaba.fastjson2.JSONObject;
import com.example.nep.vo.UserVO;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

/**
 * @Author: 韩建平
 * @Description: TODO
 * @DateTime: 2024/4/2 11:46
 **/
public class JwtUtil {
    /**
     * token的签发有效期
     */
    public static final int TOKEN_EXPIRE = 1000 * 60 * 30;
    /**
     * token加密的算法的盐
     */
    public static final String TOKEN_KEY = "EXAMPLE";
    /**
     * 生成一个新的Token
     */
    public static String newToken(UserVO user) {
        String token = Jwts.builder()
                .setSubject(user.getRole()+"")
                .setIssuedAt(new Date())
                //设置token的过期时间
                .setExpiration(new Date(System.currentTimeMillis() + TOKEN_EXPIRE))
                //设置携带的信息
                .claim("user", JSONObject.toJSONString(user))
                //设置加密方式
                .signWith(SignatureAlgorithm.HS256, TOKEN_KEY.getBytes())
                .compact();
        return token;
    }
    /**
     * 解析校验token
     */
    public static UserVO checkToken(String token){
        Claims body=null;
        try{
            body=Jwts.parser().setSigningKey(TOKEN_KEY.getBytes()).parseClaimsJws(token).getBody();
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
        String json= (String) body.get("user");
        UserVO user=JSONObject.parseObject(json,UserVO.class);
        return user;
    }
}
